package com.example.zlpermissionservice.api;

import com.example.zlpermissionservice.common.base.PageResponse;
import com.example.zlpermissionservice.common.base.ResponseResult;
import com.example.zlpermissionservice.dto.request.RoleReqDTO;
import com.example.zlpermissionservice.dto.response.ResourceResDTO;
import com.example.zlpermissionservice.dto.response.RoleResDTO;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author zhenliu（孙凌岳）
 * @Description 提供给用户服务的角色RPC接口
 * @Date 2025/6/16 8:51
 * @Version 1.0
 */
@FeignClient(name = "zl-permission-service", path = "/permission/inner/role")
public interface RoleApi {

    /**
     * 删除角色
     * @param roleId
     * @return
     */
    Integer deleteRoleById(@PathVariable Long roleId);

    /**
     * 修改用户
     * @param roleReqDTO
     * @return
     */
    Boolean updateRole(RoleReqDTO roleReqDTO);

    /**
     * 保存角色
     * @param roleReqDTO
     * @return
     */
    RoleResDTO createRole(@RequestBody RoleReqDTO roleReqDTO);

    /**
     * 分页查询角色信息
     * @param roleReqDTO
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageResponse<RoleResDTO> findRolePage(RoleReqDTO roleReqDTO, int pageNum, int pageSize);

    /**
     * 初始化查询角色信息
     * @return
     */
    List<RoleResDTO> initRoles();

    /**
     *  查询用户对应角色
     * @param userId 查询条件
     * @return: List<Role>
     */
    public List<RoleResDTO> findRoleResDTOListByUserId(Long userId);

    /**
     *  查询用户列表对应角色列表
     * @param userIds 查询条件
     * @return: List<Role>
     */
    public List<RoleResDTO> findRoleResDTOListByUserId(List<Long> userIds);

    /**
     * 绑定默认角色（普通用户）
     * @param userId 用户ID
     */
    @PostMapping("/bind-default-role/{userId}")
    void bindDefaultRole(@PathVariable("userId") Long userId);

    /**
     * 查询用户角色码（返回 role_code）
     * @param userId 用户ID
     * @return 角色码字符串，比如 "admin"
     */
    String getUserRoleCode(Long userId);

    /**
     * 根据角色标识获取所有用户ID
     * @param roleCode
     * @return
     */
    List<Long> getUserIdsByRoleCode(String roleCode);

    /**
     * 超管调用：升级用户为管理员
     * @param userId 用户ID
     */
    @PostMapping("/upgrade-to-admin/{userId}")
    void upgradeToAdmin(@PathVariable("userId") Long userId);

    /**
     * 超管调用：降级用户为普通角色
     * @param userId 用户ID
     */
    @PostMapping("/downgrade-to-user/{userId}")
    void downgradeToUser(@PathVariable("userId") Long userId);

    public String test();
}
